{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先 import 必要的模块\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "#评价指标为logloss\n",
    "from sklearn.metrics import log_loss  \n",
    "\n",
    "#from matplotlib import pyplot\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pregnants</th>\n",
       "      <th>Plasma_glucose_concentration</th>\n",
       "      <th>blood_pressure</th>\n",
       "      <th>Triceps_skin_fold_thickness</th>\n",
       "      <th>serum_insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>Diabetes_pedigree_function</th>\n",
       "      <th>Age</th>\n",
       "      <th>Target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.639947</td>\n",
       "      <td>0.866045</td>\n",
       "      <td>-0.031990</td>\n",
       "      <td>0.670643</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>0.166619</td>\n",
       "      <td>0.468492</td>\n",
       "      <td>1.425995</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.844885</td>\n",
       "      <td>-1.205066</td>\n",
       "      <td>-0.528319</td>\n",
       "      <td>-0.012301</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>-0.852200</td>\n",
       "      <td>-0.365061</td>\n",
       "      <td>-0.190672</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.233880</td>\n",
       "      <td>2.016662</td>\n",
       "      <td>-0.693761</td>\n",
       "      <td>-0.012301</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>-1.332500</td>\n",
       "      <td>0.604397</td>\n",
       "      <td>-0.105584</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.844885</td>\n",
       "      <td>-1.073567</td>\n",
       "      <td>-0.528319</td>\n",
       "      <td>-0.695245</td>\n",
       "      <td>-0.540642</td>\n",
       "      <td>-0.633881</td>\n",
       "      <td>-0.920763</td>\n",
       "      <td>-1.041549</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.141852</td>\n",
       "      <td>0.504422</td>\n",
       "      <td>-2.679076</td>\n",
       "      <td>0.670643</td>\n",
       "      <td>0.316566</td>\n",
       "      <td>1.549303</td>\n",
       "      <td>5.484909</td>\n",
       "      <td>-0.020496</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   pregnants  Plasma_glucose_concentration  blood_pressure  \\\n",
       "0   0.639947                      0.866045       -0.031990   \n",
       "1  -0.844885                     -1.205066       -0.528319   \n",
       "2   1.233880                      2.016662       -0.693761   \n",
       "3  -0.844885                     -1.073567       -0.528319   \n",
       "4  -1.141852                      0.504422       -2.679076   \n",
       "\n",
       "   Triceps_skin_fold_thickness  serum_insulin       BMI  \\\n",
       "0                     0.670643      -0.181541  0.166619   \n",
       "1                    -0.012301      -0.181541 -0.852200   \n",
       "2                    -0.012301      -0.181541 -1.332500   \n",
       "3                    -0.695245      -0.540642 -0.633881   \n",
       "4                     0.670643       0.316566  1.549303   \n",
       "\n",
       "   Diabetes_pedigree_function       Age  Target  \n",
       "0                    0.468492  1.425995       1  \n",
       "1                   -0.365061 -0.190672       0  \n",
       "2                    0.604397 -0.105584       1  \n",
       "3                   -0.920763 -1.041549       0  \n",
       "4                    5.484909 -0.020496       1  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取数据\n",
    "train = pd.read_csv(\"FE_EDA_pima-indians-diabetes.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#  get labels\n",
    "y_train = train['Target']   \n",
    "X_train = train.drop([\"Target\"], axis=1)\n",
    "\n",
    "#用于特征重要性可视化\n",
    "feat_names = X_train.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cv accuracy score is: [0.48797856 0.53011593 0.4562292  0.422546   0.48392885]\n",
      "cv logloss is: 0.47615970944434044\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "lr= LogisticRegression()\n",
    "\n",
    "#交叉验证用于评估模型性能和进行参数调优（模型选择）\n",
    "#分类任务中交叉验证缺省是采用StratifiedKFold\n",
    "#数据集比较大，采用5折交叉验证\n",
    " \n",
    "from sklearn.model_selection import cross_val_score\n",
    "loss=cross_val_score(lr,X_train,y_train,cv=5,scoring='neg_log_loss')\n",
    "#%timeit loss_sparse=cross_val_score(lr,X_train_sparse,y_train,cv=3,\n",
    "# scoring='neg_log_loss')\n",
    " \n",
    "print('cv accuracy score is:',-loss)\n",
    "print('cv logloss is:',-loss.mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.4760264042525903\n",
      "{'C': 1, 'penalty': 'l1'}\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "#请尝试将L1正则和L2正则分开，并配合合适的优化求解算法（solver）\n",
    "#tuned_parameters={'penalth':['l1','l2'],'C':[0.001,0.01,0.1,1,10,100,\n",
    "# 1000]}\n",
    "#参数的搜索范围\n",
    "penaltys=['l1','l2']\n",
    "Cs=[0.001,0.01,0.1,1,10,100,1000]\n",
    "#调优的参数集合，搜索网格为2x5，在网格上的交叉点进行搜索\n",
    "tuned_parameters=dict(penalty=penaltys,C=Cs)\n",
    "\n",
    "lr_penalty=LogisticRegression(solver='liblinear')\n",
    "grid=GridSearchCV(lr_penalty,tuned_parameters,cv=5,scoring='neg_log_loss',n_jobs=2)\n",
    "grid.fit(X_train,y_train)\n",
    "\n",
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot CV误差曲线\n",
    "test_means=grid.cv_results_['mean_test_score']\n",
    "test_stds=grid.cv_results_['std_test_score']\n",
    "train_means=grid.cv_results_['mean_train_score']\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "#plot results\n",
    "n_Cs=len(Cs)\n",
    "number_penaltys=len(penaltys)\n",
    "test_scores=np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores=np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds=np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds=np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "X_axis=np.log10(Cs)\n",
    "for i,value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs),test_scores[i],label='penalty:'+str(value)\n",
    "    plt.errorbar(X_axis,-test_scores[:,i],yerr=test_stds[:,i],\n",
    "        label=penaltys[i]+'Test')\n",
    "    plt.errorbar(X_axis,-train_scores[:,i],yerr=train_stds[:,i],\n",
    "        label=penaltys[i]+'Train')\n",
    "plt.legend()\n",
    "plt.xlabel('log(C)')\n",
    "plt.ylabel('logloss')\n",
    "plt.savefig('LogisticGridSearchCV_c.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7747395833333334\n",
      "{'C': 0.1, 'penalty': 'l2'}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "\n",
    "lr_penalty= LogisticRegression()\n",
    "\n",
    "#缺省scoring为正确率\n",
    "grid= GridSearchCV(lr_penalty, tuned_parameters,cv=5)\n",
    "grid.fit(X_train,y_train)\n",
    "\n",
    "print(grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot CV误差曲线\n",
    "test_means=grid.cv_results_['mean_test_score']\n",
    "test_stds=grid.cv_results_['std_test_score']\n",
    "train_means=grid.cv_results_['mean_train_score']\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "#plot results\n",
    "n_Cs=len(Cs)\n",
    "number_penaltys=len(penaltys)\n",
    "test_scores=np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores=np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds=np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds=np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "X_axis=np.log10(Cs)\n",
    "for i,value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs),test_scores[i],label='penalty:'+str(value)\n",
    "    plt.errorbar(X_axis,test_scores[:,i],yerr=test_stds[:,i],\n",
    "        label=penaltys[i]+'Test')\n",
    "    plt.errorbar(X_axis,train_scores[:,i],yerr=train_stds[:,i],\n",
    "        label=penaltys[i]+'Train')\n",
    "plt.legend()\n",
    "plt.xlabel('log(C)')\n",
    "plt.ylabel('logloss')\n",
    "plt.savefig('LogisticGridSearchCV_c.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
